﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace UsandoSprites2
{
    //classe Nave herdando de Sprite, precisa implementar os métodos abstratos
    class Nave : Sprite
    {

        private Point frameNave = new Point(1, 0);
        public Nave(Texture2D textura, Vector2 posicaoXY, Point frameBounder, Point colisaoBounder,
                Point frame, Point sheetFrameSize, int updateLastFrameTime, int milisegundosPorFrame,
                Vector2 velocidade, float profundidade)
            : base(textura, posicaoXY, frameBounder, colisaoBounder,
                frame, sheetFrameSize, updateLastFrameTime, milisegundosPorFrame,
                velocidade, profundidade)
        {

        }


        /// <summary>
        /// Implementa o deslocamento da nave usando o teclado ou o controle
        /// </summary>
        public override Vector2 Direcao
        {
            get
            {
                Vector2 direcaoNave = Vector2.Zero;
                KeyboardState keyBoard = Keyboard.GetState();
                frameNave = new Point(1, 0);
                if (keyBoard.IsKeyDown(Keys.Left))
                {
                    direcaoNave.X = -1;
                    frameNave.X = 0;
                }

                if (keyBoard.IsKeyDown(Keys.Right))
                {
                    direcaoNave.X = 1;
                    frameNave.X = 2;
                }

                if (keyBoard.IsKeyDown(Keys.Up))
                {
                    direcaoNave.Y = -1;
                }

                if (keyBoard.IsKeyDown(Keys.Down))
                {
                    direcaoNave.Y = 1;
                }

                GamePadState gamePad = GamePad.GetState(PlayerIndex.One);
                if (gamePad.ThumbSticks.Left.X != 0)
                {
                    direcaoNave.X = gamePad.ThumbSticks.Left.X;
                    if (direcaoNave.X > 0)
                    {
                        frameNave.X = 2;
                    }
                    else if (direcaoNave.X < 0)
                    {
                        frameNave.X = 0;
                    }

                }

                if (gamePad.ThumbSticks.Left.Y != 0)
                {
                    direcaoNave.Y = (-1) * gamePad.ThumbSticks.Left.Y;


                }


                return direcaoNave * velocidade;
            }
        }
        


        public override void Update(GameTime gameTime, Point frameAtivo)
        {
            posicaoXY += Direcao;
            base.Update(gameTime, frameNave);
        }

    }
}

